package admin

import (
	"gitee.com/gopher2011/gin"
	"gitee.com/gopher2011/mall/app/dao"
	"gitee.com/gopher2011/mall/app/service"
	"strconv"
)

// umsMenuApi 管理对象。
var UmsMenu = &umsMenuApi{}

// 后台菜单管理 /menu
type umsMenuApi struct{}

// 添加后台菜单 /create Post 参数: dao.UmsMenu
func (it *umsMenuApi) Create(r *gin.Context) {
	var p dao.UmsMenu
	r.Parse(&p)
	res, err := service.UmsMenu.Create(p)
	if err != nil {
		r.JSON(400, gin.H{"msg": "添加后台菜单失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "添加后台菜单成功", "data": res})
	}
}

// 修改后台菜单 /update/:id Post 参数:id,dao.UmsMenu
func (it *umsMenuApi) Update(r *gin.Context) {
	str := r.Param("id")
	id, _ := strconv.Atoi(str)
	var p dao.UmsMenu
	r.Parse(&p)
	res, err := service.UmsMenu.Update(int64(id), &p)
	if err != nil {
		r.JSON(400, gin.H{"msg": "修改后台菜单失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "修改后台菜单成功", "data": res})
	}
}

// 根据ID获取菜单详情 /:id Get 参数:id
func (it *umsMenuApi) GetItem(r *gin.Context) {
	str := r.Param("id")
	id, _ := strconv.Atoi(str)
	res, err := service.UmsMenu.GetItem(int64(id))
	if err != nil {
		r.JSON(400, gin.H{"msg": "获取菜单详情失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "获取菜单详情成功", "data": res})
	}
}

// 根据ID删除后台菜单 /delete/:id Post 参数:id
func (it *umsMenuApi) Delete(r *gin.Context) {
	str := r.Param("id")
	id, _ := strconv.Atoi(str)
	res, err := service.UmsMenu.Delete(int64(id))
	if err != nil {
		r.JSON(400, gin.H{"msg": "根据ID删除后台菜单失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "根据ID删除后台菜单成功", "data": res})
	}
}

// 分页查询后台菜单 /list/:parentId Get 参数:parentId
func (it *umsMenuApi) List(r *gin.Context) {
	str := r.Param("parentId")
	id, _ := strconv.Atoi(str)
	var p dao.UmsMenuList
	r.Parse(&p)
	res, err := service.UmsMenu.List(int64(id), p)
	if err != nil {
		r.JSON(400, gin.H{"msg": "分页查询后台菜单失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "分页查询后台菜单成功", "data": res})
	}
}

// 树形结构返回所有菜单列表 /treeList Get
func (it *umsMenuApi) TreeList(r *gin.Context) {
	res, err := service.UmsMenu.TreeList()
	if err != nil {
		r.JSON(400, gin.H{"msg": "树形结构返回所有菜单列表失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "树形结构返回所有菜单列表成功", "data": res})
	}
}

// 修改菜单显示状态 /updateHidden/:id Post 参数:id,hidden
func (it *umsMenuApi) UpdateHidden(r *gin.Context) {
	str := r.Param("id")
	id, _ := strconv.Atoi(str)
	form := r.PostForm("hidden")
	hidden, _ := strconv.Atoi(form)
	res, err := service.UmsMenu.UpdateHidden(int64(id), int32(hidden))
	if err != nil {
		r.JSON(400, gin.H{"msg": "修改菜单显示状态失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "修改菜单显示状态成功", "data": res})
	}
}
